import { reqGetCode ,reqUserRegister,  reqUserLogin,reqUserInfo,reqLogout} from "@/api"
import {setToken, getToken,removeToken} from '@/utils/token'


//登录与注册的模块
const state = {
    code:'',
    token:getToken(),
    userInfo:{},

}
const mutations = {
    GETCODE(state,code) {
        state.code = code
    },
    USERLOGIN(state,token){
        state.token = token

    },
    //存储用户信息
    GETUSERINGO(state, userInfo) {
        state.userInfo = userInfo;
    },
    CLEAR(state){
        // 清空用户信息和本地存储
        state.token = '';
        state.userInfo = {};
        removeToken();
    }
}
const actions = {
   async getCode({commit},phone){
        let result = await reqGetCode(phone);
       if(result.code ==200){
           commit('GETCODE',result.data)
       } else {
           return Promise.reject(new Error('faile'))
       }
    },
    async userRegister({commit},{phone,code,password}) {
        let result = await reqUserRegister(phone,code,password)
        if (result.code == 200) {
            return 'ok';
        } else {
            //捕获到错误信息
            return Promise.reject(result.message);
        }
    },
    //登录业务
    async userLogin({ commit }, { phone, password }) {
        //当前的这个action，向服务器发起登录请求
        let result = await reqUserLogin(phone, password);
        //切记:当用户登录成功以后，服务器会返回相应数据信息，数据信息当中包含token
        //登录成功一定是有token，登录没有成功【没有token】
        //用户登录成功，一般只是返回token，很少返回用户名
        //将来需要在发请求（获取用户名字的）携带token给服务器【用户信息】
        if (result.code == 200) {
            //如果仓库,已经存储token,用户一定是登陆了
            commit("USERLOGIN", result.data.token);
            //持久化存储token
            setToken(result.data.token);
            return 'ok';
        } else {
            //登录失败
            return Promise.reject(result.message);
        }

    },
     //获取用户信息:只要出发这个action，就可以获取用户信息
    
    async getUserInfo({commit}){
        let result = await reqUserInfo();
        //将用户信息存储到store中
        if(result.code === 200){
            //vuex存储用户信息
            commit('GETUSERINGO',result.data)
            return  'ok'
        }else {
            
            return Promise.reject(result.message);
        }
          
    },
    //退出登录
    async userLogout({commit}) {
        //发请求通知服务器销毁token
        let result = await reqLogout();
        if(result.code==200){
            commit("CLEAR");
            return 'ok';
        } else {
            return Promise.reject(new Error('faile'))
        }

    }
   
}
const getters = {}

export default {
    state,
    mutations,
    actions,
    getters
}